package chapter9;

import java.util.ArrayList;
import java.util.List;

public class Canvas {
    /*public void drawAll(List<Shape> shapes) {
        for(Shape s : shapes) {
            s.draw(this);
        }
    }*/

    /**
     * 使用被限制的泛型通配符，形式如：? extends xxx的形式
     * 该形式限制了泛型的上限为Shape，也可以为Shape的子类
     * 此种形式的通配符也不可向集合中添加元素，因为通配符类型未知
     * @param shapes
     */
    public void drawAll(List<? extends Shape> shapes) {
        for(Shape s : shapes) {
            s.draw(this);
        }
    }

    public static void main(String[] args) {
        Canvas canvas = new Canvas();
        /*
            声明一个泛型类型为Circle的集合类，调用drawAll方法，该方法的入参是List<Shape>
            虽然Shape是Circle的父类，但是List<Shape>和List<Circle>并无继承关系
            所以下边的代码使用List<Circle>作为入参调用drawAll会编译错误
         */
        List<Circle> circles = new ArrayList<>();
        //canvas.drawAll(circles);
        canvas.drawAll(circles);
    }
}
